/*  =========================================================================
    curve - generated layer of public API

    Copyright (c) the Contributors as noted in the AUTHORS file.         
    This file is part of the Curve authentication and encryption library.
                                                                         
    This Source Code Form is subject to the terms of the Mozilla Public  
    License, v. 2.0. If a copy of the MPL was not distributed with this  
    file, You can obtain one at http://mozilla.org/MPL/2.0/.             

################################################################################
#  THIS FILE IS 100% GENERATED BY ZPROJECT; DO NOT EDIT EXCEPT EXPERIMENTALLY  #
#  Read the zproject/README.md for information about making permanent changes. #
################################################################################
    =========================================================================
*/

#ifndef CURVE_LIBRARY_H_INCLUDED
#define CURVE_LIBRARY_H_INCLUDED

//  Set up environment for the application

//  External dependencies
#include <czmq.h>
#include <sodium.h>

//  CURVE version macros for compile-time API detection
#define CURVE_VERSION_MAJOR 1
#define CURVE_VERSION_MINOR 0
#define CURVE_VERSION_PATCH 0

#define CURVE_MAKE_VERSION(major, minor, patch) \
    ((major) * 10000 + (minor) * 100 + (patch))
#define CURVE_VERSION \
    CURVE_MAKE_VERSION(CURVE_VERSION_MAJOR, CURVE_VERSION_MINOR, CURVE_VERSION_PATCH)

#if defined (__WINDOWS__)
#   if defined CURVE_STATIC
#       define CURVE_EXPORT
#   elif defined CURVE_INTERNAL_BUILD
#       if defined DLL_EXPORT
#           define CURVE_EXPORT __declspec(dllexport)
#       else
#           define CURVE_EXPORT
#       endif
#   elif defined CURVE_EXPORTS
#       define CURVE_EXPORT __declspec(dllexport)
#   else
#       define CURVE_EXPORT __declspec(dllimport)
#   endif
#   define CURVE_PRIVATE
#else
#   define CURVE_EXPORT
#   if (defined __GNUC__ && __GNUC__ >= 4) || defined __INTEL_COMPILER
#       define CURVE_PRIVATE __attribute__ ((visibility ("hidden")))
#   else
#       define CURVE_PRIVATE
#   endif
#endif

//  Project has no stable classes, so we build the draft API
#undef  CURVE_BUILD_DRAFT_API
#define CURVE_BUILD_DRAFT_API

//  Opaque class structures to allow forward references
//  These classes are stable or legacy and built in all releases
//  Draft classes are by default not built in stable releases
#ifdef CURVE_BUILD_DRAFT_API
typedef struct _curve_client_t curve_client_t;
#define CURVE_CLIENT_T_DEFINED
typedef struct _curve_server_t curve_server_t;
#define CURVE_SERVER_T_DEFINED
typedef struct _curve_codec_t curve_codec_t;
#define CURVE_CODEC_T_DEFINED
typedef struct _curve_z85_t curve_z85_t;
#define CURVE_Z85_T_DEFINED
#endif // CURVE_BUILD_DRAFT_API


//  Public classes, each with its own header file
#ifdef CURVE_BUILD_DRAFT_API
#include "curve_client.h"
#include "curve_server.h"
#include "curve_codec.h"
#include "curve_z85.h"
#endif // CURVE_BUILD_DRAFT_API

#ifdef CURVE_BUILD_DRAFT_API
//  Self test for private classes
CURVE_EXPORT void
    curve_private_selftest (bool verbose);
#endif // CURVE_BUILD_DRAFT_API

#endif
/*
################################################################################
#  THIS FILE IS 100% GENERATED BY ZPROJECT; DO NOT EDIT EXCEPT EXPERIMENTALLY  #
#  Read the zproject/README.md for information about making permanent changes. #
################################################################################
*/
